package xmlParsers;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import negocio.Item_Compra;
import negocio.OrdenCompra;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XmlBuildRemito {
	
	private static XmlBuildRemito instancia;

	private DocumentBuilderFactory factory;
	
	private XmlBuildRemito(){
		this.factory=DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
	}
	

	public static XmlBuildRemito getinstancia(){
		if(instancia==null)
			instancia=new XmlBuildRemito();
		return instancia;
	}
	
	
	
	
	public String crearRemitoCorrecto (OrdenCompra o) throws ParserConfigurationException, TransformerException{
		
		DocumentBuilder builder= this.factory.newDocumentBuilder();
		Document doc = builder.newDocument();
		
		Element root = doc.createElement(o.getProveedor());
		doc.appendChild(root);
		
		SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_WEEK, 14);    
		String fecha = dateformat.format(cal.getTime());
		
		root.setAttribute("fecha", fecha);
		root.setAttribute("numeroOrden", Integer.toString(o.getNumeroOrden()));
		
		Element productos=doc.createElement("productos");
		root.appendChild(productos);
		
		
		for(Item_Compra i : o.getItemsCompra()){
			
			Element nombre = doc.createElement("nombre");
			nombre.setTextContent(i.getProducto().getNombre());
			
			Element cantidad=doc.createElement("cantidad");
			cantidad.setTextContent(Float.toString(i.getCantidad()));
			
			Element descuento = doc.createElement("descuento");
			descuento.setTextContent(Float.toString(i.getDescuentoOtorgado()));
			
			Element subtotal = doc.createElement("subtotal");
			subtotal.setTextContent(Float.toString(i.getPrecio()));
			
			productos.appendChild(nombre);
			productos.appendChild(cantidad);
			productos.appendChild(descuento);
			productos.appendChild(subtotal);
				
		}
		
		
		Element total = doc.createElement("total");
		total.setTextContent(Float.toString(o.getTotal()));
		root.appendChild(total);
		
		SimpleDateFormat dateformat2 = new SimpleDateFormat("dd-MM-yyyy");
		Calendar cal2 = Calendar.getInstance();
		cal2.add(Calendar.DAY_OF_WEEK, 14);    
		String fecha2 = dateformat2.format(cal.getTime());
		
		String path="xmls/"+"Remito"+o.getProveedor()+fecha2+".xml";
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		DOMSource source = new DOMSource(doc);
		StreamResult result = new StreamResult(new File(path));

		transformer.transform(source, result);
		 return path;
		
	}
	

	
	
	
public String crearRemitoExedente (OrdenCompra o) throws ParserConfigurationException, TransformerException{
		
		DocumentBuilder builder= this.factory.newDocumentBuilder();
		Document doc = builder.newDocument();
		
		Element root = doc.createElement(o.getProveedor());
		doc.appendChild(root);
		
		SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_WEEK, 14);    
		String fecha = dateformat.format(cal.getTime());
		
		root.setAttribute("fecha", fecha);
		root.setAttribute("numeroOrden", Integer.toString(o.getId_orden_de_compra()));
		
		Element productos=doc.createElement("productos");
		root.appendChild(productos);
		
		
		for(Item_Compra i : o.getItemsCompra()){
			
			Element nombre = doc.createElement("nombre");
			nombre.setTextContent(i.getProducto().getNombre());
			
			Element cantidad=doc.createElement("cantidad");
			cantidad.setTextContent(Float.toString(i.getCantidad() + 45));
			
			Element descuento = doc.createElement("descuento");
			descuento.setTextContent(Float.toString(i.getDescuentoOtorgado()));
			
			Element subtotal = doc.createElement("subtotal");
			subtotal.setTextContent(Float.toString(i.getPrecio()));
			
			productos.appendChild(nombre);
			productos.appendChild(cantidad);
			productos.appendChild(descuento);
			productos.appendChild(subtotal);
				
		}
		
		
		Element total = doc.createElement("total");
		total.setTextContent(Float.toString(o.getTotal()));
		root.appendChild(total);
		
		
		SimpleDateFormat dateformat2 = new SimpleDateFormat("dd-MM-yyyy");
		Calendar cal2 = Calendar.getInstance();
		cal2.add(Calendar.DAY_OF_WEEK, 14);    
		String fecha2 = dateformat2.format(cal.getTime());
	
		
		String path="xmls/"+"Remito"+o.getProveedor()+fecha2+".xml";
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		DOMSource source = new DOMSource(doc);
		StreamResult result = new StreamResult(new File(path));

		transformer.transform(source, result);
		
		return path;
		
		
	}
	
	
	
	

public String crearRemitoFaltante (OrdenCompra o) throws ParserConfigurationException, TransformerException{
	
	DocumentBuilder builder= this.factory.newDocumentBuilder();
	Document doc = builder.newDocument();
	
	Element root = doc.createElement(o.getProveedor());
	doc.appendChild(root);
	
	SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
	Calendar cal = Calendar.getInstance();
	cal.add(Calendar.DAY_OF_WEEK, 14);    
	String fecha = dateformat.format(cal.getTime());
	
	root.setAttribute("fecha", fecha);
	root.setAttribute("numeroOrden", Integer.toString(o.getId_orden_de_compra()));
	
	Element productos=doc.createElement("productos");
	root.appendChild(productos);
	
	
	for(Item_Compra i : o.getItemsCompra()){
		
		Element nombre = doc.createElement("nombre");
		nombre.setTextContent(i.getProducto().getNombre());
		
		Element cantidad=doc.createElement("cantidad");
		
		
		
		cantidad.setTextContent(Float.toString(i.getCantidad() - 7));
		
		Element descuento = doc.createElement("descuento");
		descuento.setTextContent(Float.toString(i.getDescuentoOtorgado()));
		
		Element subtotal = doc.createElement("subtotal");
		subtotal.setTextContent(Float.toString(i.getPrecio()));
		
		productos.appendChild(nombre);
		productos.appendChild(cantidad);
		productos.appendChild(descuento);
		productos.appendChild(subtotal);
			
	}
	
	
	Element total = doc.createElement("total");
	total.setTextContent(Float.toString(o.getTotal()));
	root.appendChild(total);
	
	
	SimpleDateFormat dateformat2 = new SimpleDateFormat("dd-MM-yyyy");
	Calendar cal2 = Calendar.getInstance();
	cal2.add(Calendar.DAY_OF_WEEK, 14);    
	String fecha2 = dateformat2.format(cal.getTime());
	
	
	String path="xmls/"+"Remito"+o.getProveedor()+fecha2+".xml";
	TransformerFactory transformerFactory = TransformerFactory.newInstance();
	Transformer transformer = transformerFactory.newTransformer();
	DOMSource source = new DOMSource(doc);
	StreamResult result = new StreamResult(new File(path));

	transformer.transform(source, result);
	return path;
}




	
}
